/*
 * @(#)InterfaceVertex.java
 *
 * Revision:
 * Author                                         Date           
 * --------------------------------------------   ------------   
 *  Jeremias D. Serafim de Araujo                     03/02/2012    
 */
package br.edu.ufcg.splab.core;
import java.util.List;
import java.util.UUID;

/**
 * Interface to represent a vertex 
 * 
 **/
public interface InterfaceVertex {
	
	
	/**
	 * Return the label of vertex
	 * 
	 * @return string label
	 */
	public String getLabel();
	
	/**
	 * Changes the label of vertex
	 * 
	 * @param label is a new label of vertex
	 */
	public void setLabel(String label);
	
	/**
	 * Returns a list of edges out the vertex
	 * 
	 * @return list of edges
	 */
	public List<InterfaceEdge> getOutTransitions();
	
	/**
	 * Return a list of edges in the vertex
	 * 
	 * @return list of edges
	 */
	public List<InterfaceEdge> getInTransitions();
	
	/**
	 * Adding an edge from the list of outTransitions
	 * 
	 * @param edge 
	 */
	public void addEdgeOutTransitions(InterfaceEdge edge);
	
	/**
	 * Adding an edge from the list of inTransitions
	 * 
	 * @param edge
	 */
	public void addEdgeInTransitions(InterfaceEdge edge);
	
	/**
	 * Returns true is the list of outTransitions is empty
	 * or false otherwise
	 * 
	 * @return boolean
	 */
	public boolean isLeaf();
	
	/**
	 * Returns uuid of vertex
	 * 
	 * @return uuid of vertex
	 */
	public UUID getUUID();
	
	
}
